package com.bosssoft.cloud.wechat.core.router;

import com.bosssoft.cloud.wechat.core.bean.param.portal.WxMsgParam;
import com.bosssoft.cloud.wechat.core.handler.EventHandler;
import com.bosssoft.cloud.wechat.core.handler.TextHandler;
import com.bosssoft.cloud.wechat.core.infra.config.WxTemplet;
import com.bosssoft.cloud.wechat.infrastructure.constant.WxKeywordConsts;
import com.bosssoft.cloud.wechat.core.infra.properties.WxTempletProperties.TextTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpSession;

import static com.bosssoft.cloud.wechat.infrastructure.constant.WxKeywordConsts.MsgType;

/**
 * 文本消息router
 * 对接收到用户的文本消息进行判断和处理
 * 如：
 * 用户发送1，给用户回复一张宣传图
 * 用户发送2，回复一段文字等等
 *
 * @author wcy create on 2021/6/22 11:24 上午
 */

@Component
public class TextRouter {

    @Autowired
    private TextHandler textHandler;
    @Autowired
    private EventHandler eventHandler;

    /**
     * 在此route到对应回复类型
     * eg：
     * 用户发送1，回复文本消息xxx
     * 用户发送2，回复一段操作视频，音频等等等
     *
     * @param param 请求信息
     * @return 返回要回复的封装xml信息
     */
    public String route(WxMsgParam param, HttpSession session) {
        // 根据用户输入的文本，得到要返回的data
        TextTemplate.TextData data = WxTemplet.getTextData(param.getContent());
        // 分析返回data的类型，进行对应类型的数据处理
        if (data != null)
            switch (data.getType()) {
                case MsgType.TEXT:
                    return textHandler.handle(param, data.getMsg());
                case MsgType.EVENT:
                    return eventHandler.handle(param);
            }
        return WxKeywordConsts.SUCCESS;
    }
}
